package org.ysu.shoeShopping.service;

import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.ysu.shoeShopping.entity.Shoes;
import java.util.List;

/**
 * 鞋子商品业务服务接口
 * 定义鞋子商品相关的业务逻辑操作，包括：
 * - 商品基础CRUD操作
 * - 商品状态管理（启用/禁用）
 * - 商品信息查询和分页
 *
 * @author makejava
 * @since 2025-09-13 16:57:20
 */
public interface ShoesService {

    /**
     * 通过ID查询单条数据
     *
     * @param sid 主键
     * @return 实例对象
     */
    Shoes queryById(Integer sid);

    /**
     * 分页查询
     *
     * @param shoes 筛选条件
     * @param pageRequest      分页对象
     * @return 查询结果
     */
    Page<Shoes> queryByPage(Shoes shoes, PageRequest pageRequest);

    /**
     * 新增数据
     *
     * @param shoes 实例对象S
     * @return 实例对象
     */
    Shoes insert(Shoes shoes);

    /**
     * 修改数据
     *
     * @param shoes 实例对象
     * @return 实例对象
     */
    Shoes update(Shoes shoes);

    /**
     * 通过主键删除数据
     *
     * @param sid 主键
     * @return 是否成功
     */
    boolean deleteById(Integer sid);

    /**
     * 获取热门商品（按销量排序）
     *
     * @param limit 限制数量
     * @return 热门商品列表
     */
    List<Shoes> getTopSellingShoes(int limit);

    /**
     * 获取最新商品（按发布时间排序）
     *
     * @param limit 限制数量
     * @return 最新商品列表
     */
    List<Shoes> getLatestShoes(int limit);

    /**
     * 商品搜索
     * 支持按名称、性别、类型、品牌、价格等条件搜索商品
     *
     * @param keyword 搜索关键词（可选）
     * @param gender 性别筛选（可选）
     * @param typeId 商品类型ID（可选）
     * @param brandId 品牌ID（可选）
     * @param minPrice 最低价格（可选）
     * @param maxPrice 最高价格（可选）
     * @param page 页码
     * @param size 每页大小
     * @return 搜索结果列表
     */
    List<Shoes> searchShoes(String keyword, String gender, Integer typeId, Integer brandId,
                           Float minPrice, Float maxPrice, int page, int size);

    List<Shoes> getAllShoes();

    Shoes findBySnum(String snum);

}
